home *** CD-ROM | disk | FTP | other *** search
/ AGA Toolkit '97 / The AGA Toolkit '97.iso / miscellaneous / science / maths / calc / source / token.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-07  |  5.0 KB  |  144 lines

  1. /*
  2.  * Copyright (c) 1994 David I. Bell
  3.  * Permission is granted to use, distribute, or modify this source,
  4.  * provided that this copyright notice remains intact.
  5.  */
  6.  
  7. #ifndef    TOKEN_H
  8. #define    TOKEN_H
  9.  
  10. #include "zmath.h"
  11.  
  12.  
  13. /*
  14.  * Token types
  15.  */
  16. #define T_NULL            0    /* null token */
  17. #define T_LEFTPAREN        1    /* left parenthesis "(" */
  18. #define T_RIGHTPAREN        2    /* right parenthesis ")" */
  19. #define T_LEFTBRACE        3    /* left brace "{" */
  20. #define T_RIGHTBRACE        4    /* right brace "}" */
  21. #define T_SEMICOLON        5    /* end of statement ";" */
  22. #define T_EOF            6    /* end of file */
  23. #define T_COLON            7    /* label character ":" */
  24. #define T_ASSIGN        8    /* assignment "=" */
  25. #define T_PLUS            9    /* plus sign "+" */
  26. #define T_MINUS            10    /* minus sign "-" */
  27. #define T_MULT            11    /* multiply sign "*" */
  28. #define T_DIV            12    /* divide sign "/" */
  29. #define T_MOD            13    /* modulo sign "%" */
  30. #define T_POWER            14    /* power sign "^" or "**" */
  31. #define T_EQ            15    /* equality "==" */
  32. #define T_NE            16    /* notequal "!=" */
  33. #define T_LT            17    /* less than "<" */
  34. #define T_GT            18    /* greater than ">" */
  35. #define T_LE            19    /* less than or equals "<=" */
  36. #define T_GE            20    /* greater than or equals ">=" */
  37. #define T_LEFTBRACKET        21    /* left bracket "[" */
  38. #define T_RIGHTBRACKET        22    /* right bracket "]" */
  39. #define T_SYMBOL        23    /* symbol name */
  40. #define T_STRING        24    /* string value (double quotes) */
  41. #define T_NUMBER        25    /* numeric real constant */
  42. #define T_PLUSEQUALS        26    /* plus equals "+=" */
  43. #define T_MINUSEQUALS        27    /* minus equals "-=" */
  44. #define T_MULTEQUALS        28    /* multiply equals "*=" */
  45. #define T_DIVEQUALS        29    /* divide equals "/=" */
  46. #define T_MODEQUALS        30    /* modulo equals "%=" */
  47. #define T_PLUSPLUS        31    /* plusplus "++" */
  48. #define T_MINUSMINUS        32    /* minusminus "--" */
  49. #define T_COMMA            33    /* comma "," */
  50. #define T_ANDAND        34    /* logical and "&&" */
  51. #define T_OROR            35    /* logical or "||" */
  52. #define T_OLDVALUE        36    /* old value from previous calculation */
  53. #define T_SLASHSLASH        37    /* integer divide "//" */
  54. #define T_NEWLINE        38    /* newline character */
  55. #define T_SLASHSLASHEQUALS    39    /* integer divide equals "//=" */
  56. #define T_AND            40    /* arithmetic and "&" */
  57. #define T_OR            41    /* arithmetic or "|" */
  58. #define T_NOT            42    /* logical not "!" */
  59. #define T_LEFTSHIFT        43    /* left shift "<<" */
  60. #define T_RIGHTSHIFT        44    /* right shift ">>" */
  61. #define T_ANDEQUALS        45    /* and equals "&=" */
  62. #define T_OREQUALS        46    /* or equals "|= */
  63. #define T_LSHIFTEQUALS        47    /* left shift equals "<<=" */
  64. #define T_RSHIFTEQUALS        48    /* right shift equals ">>= */
  65. #define T_POWEREQUALS        49    /* power equals "^=" or "**=" */
  66. #define T_PERIOD        50    /* period "." */
  67. #define T_IMAGINARY        51    /* numeric imaginary constant */
  68. #define    T_AMPERSAND        52    /* ampersand "&" */
  69. #define    T_QUESTIONMARK        53    /* question mark "?" */
  70.  
  71.  
  72. /*
  73.  * Keyword tokens
  74.  */
  75. #define T_IF            101    /* if keyword */
  76. #define T_ELSE            102    /* else keyword */
  77. #define T_WHILE            103    /* while keyword */
  78. #define T_CONTINUE        104    /* continue keyword */
  79. #define T_BREAK            105    /* break keyword */
  80. #define T_GOTO            106    /* goto keyword */
  81. #define T_RETURN        107    /* return keyword */
  82. #define T_LOCAL            108    /* local keyword */
  83. #define T_GLOBAL        109    /* global keyword */
  84. #define    T_STATIC        110    /* static keyword */
  85. #define T_DO            111    /* do keyword */
  86. #define T_FOR            112    /* for keyword */
  87. #define T_SWITCH        113    /* switch keyword */
  88. #define T_CASE            114    /* case keyword */
  89. #define T_DEFAULT        115    /* default keyword */
  90. #define T_QUIT            116    /* quit keyword */
  91. #define T_DEFINE        117    /* define keyword */
  92. #define T_READ            118    /* read keyword */
  93. #define T_SHOW            119    /* show keyword */
  94. #define T_HELP            120    /* help keyword */
  95. #define T_WRITE            121    /* write keyword */
  96. #define T_MAT            122    /* mat keyword */
  97. #define T_OBJ            123    /* obj keyword */
  98. #define T_PRINT            124    /* print keyword */
  99. #define T_CD            125    /* change directory keyword */
  100.  
  101.  
  102. #define iskeyword(n) ((n) > 100)    /* TRUE if token is a keyword */
  103.  
  104.  
  105. /*
  106.  * Flags returned describing results of expression parsing.
  107.  */
  108. #define EXPR_RVALUE    0x0001        /* result is an rvalue */
  109. #define EXPR_CONST    0x0002        /* result is constant */
  110. #define EXPR_ASSIGN    0x0004        /* result is an assignment */
  111.  
  112. #define isrvalue(n)    ((n) & EXPR_RVALUE)    /* TRUE if expression is rvalue */
  113. #define islvalue(n)    (((n) & EXPR_RVALUE) == 0)    /* TRUE if expr is lvalue */
  114. #define isconst(n)    ((n) & EXPR_CONST)    /* TRUE if expr is constant */
  115. #define isassign(n)    ((n) & EXPR_ASSIGN)    /* TRUE if expr is an assignment */
  116.  
  117.  
  118. /*
  119.  * Flags for modes for tokenizing.
  120.  */
  121. #define TM_DEFAULT    0x0        /* normal mode */
  122. #define TM_NEWLINES    0x1        /* treat any newline as a token */
  123. #define TM_ALLSYMS    0x2        /* treat almost everything as a symbol */
  124.  
  125.  
  126. extern long errorcount;        /* number of errors found */
  127.  
  128. extern char *tokenstring MATH_PROTO((void));
  129. extern long tokennumber MATH_PROTO((void));
  130. extern void inittokens MATH_PROTO((void));
  131. extern int tokenmode MATH_PROTO((int flag));
  132. extern int gettoken MATH_PROTO((void));
  133. extern void rescantoken MATH_PROTO((void));
  134.  
  135. #ifdef VARARGS
  136. extern void scanerror();
  137. #else
  138. extern void scanerror MATH_PROTO((int, char *, ...));
  139. #endif
  140.  
  141. #endif
  142.  
  143. /* END CODE */
  144.